home *** CD-ROM | disk | FTP | other *** search
/ Windows 95 API Bible / Windows 95 API Bible 3 Disc Set.iso / Win32 API Bible Book 3 of 3.iso / chapte13 / cmc.c next >
C/C++ Source or Header  |  1996-03-06  |  10KB  |  248 lines

  1.  
  2. #include <windows.h>
  3. #include "cmc.h"
  4.  
  5.  
  6.  
  7. static HMODULE hCMCLib  = NULL;
  8. static BOOL    bCMCInst = FALSE;
  9.  
  10. typedef CMC_return_code (PASCAL* LPFNCMCACTON)
  11.             ( CMC_session_id session, CMC_message_reference* message_reference, CMC_enum operation, 
  12.               CMC_flags act_on_flags, CMC_ui_id ui_id, CMC_extension* act_on_extensions );
  13.  
  14. typedef CMC_return_code (PASCAL* LPFNCMCFREE)( CMC_buffer memory );
  15.  
  16. typedef CMC_return_code (PASCAL* LPFNCMCLIST)
  17.             ( CMC_session_id session, CMC_string message_type, CMC_flags list_flags, 
  18.               CMC_message_reference* seed, CMC_uint32* count, CMC_ui_id ui_id, 
  19.               CMC_message_summary** result, CMC_extension* list_extensions );
  20.   
  21. typedef CMC_return_code (PASCAL* LPFNCMCLOGOFF)
  22.             ( CMC_session_id session, CMC_ui_id ui_id, CMC_flags logoff_flags, CMC_extension* logoff_extensions );
  23.  
  24. typedef CMC_return_code (PASCAL* LPFNCMCLOGON)
  25.             ( CMC_string service, CMC_string user, CMC_string password, CMC_object_identifier character_set, 
  26.               CMC_ui_id ui_id, CMC_uint16 caller_CMC_version, CMC_flags logon_flags, 
  27.               CMC_session_id* session, CMC_extension* logon_extensions );
  28.  
  29. typedef CMC_return_code (PASCAL* LPFNCMCLOOKUP)
  30.             ( CMC_session_id session, CMC_recipient* recipient_in, CMC_flags look_up_flags, 
  31.               CMC_ui_id ui_id, CMC_uint32* count, CMC_recipient** recipient_out, 
  32.               CMC_extension* look_up_extensions );
  33.  
  34. typedef CMC_return_code (PASCAL* LPFNCMCQUERYCONFIGURATION)
  35.             ( CMC_session_id session, CMC_enum item, CMC_buffer reference, CMC_extension* config_extensions );
  36.  
  37. typedef CMC_return_code (PASCAL* LPFNCMCREAD)
  38.             ( CMC_session_id session, CMC_message_reference* message_reference, CMC_flags read_flags, 
  39.               CMC_message** message, CMC_ui_id ui_id, CMC_extension* read_extensions );
  40.  
  41. typedef CMC_return_code (PASCAL* LPFNCMCSEND)
  42.             ( CMC_session_id session, CMC_message* message, CMC_flags send_flags, CMC_ui_id ui_id, 
  43.               CMC_extension* send_extensions );
  44.  
  45. typedef CMC_return_code (PASCAL* LPFNCMCSENDDOCUMENTS)
  46.             ( CMC_string recipient_addresses, CMC_string subject, CMC_string text_note, 
  47.               CMC_flags send_doc_flags, CMC_string file_paths, CMC_string file_names, 
  48.               CMC_string delimiter, CMC_ui_id ui_id );
  49.  
  50. LPFNCMCACTON               pfnCMCActOn  = NULL;
  51. LPFNCMCFREE                pfnCMCFree   = NULL;
  52. LPFNCMCLIST                pfnCMCList   = NULL;
  53. LPFNCMCLOGOFF              pfnCMCLogOff = NULL; 
  54. LPFNCMCLOGON               pfnCMCLogon  = NULL;
  55. LPFNCMCLOOKUP              pfnCMCLookup = NULL;
  56. LPFNCMCQUERYCONFIGURATION  pfnCMCQueryConfiguration = NULL;
  57. LPFNCMCREAD                pfnCMCRead   = NULL;
  58. LPFNCMCSEND                pfnCMCSend   = NULL;
  59. LPFNCMCSENDDOCUMENTS       pfnCMCSendDocuments = NULL;
  60.  
  61.  
  62. BOOL CMCInitialize()
  63. {
  64.    HKEY hKey;
  65.    BYTE szValue[64];
  66.  
  67.    if ( RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows Messaging Subsystem",
  68.                       0, KEY_READ, &hKey ) == ERROR_SUCCESS )
  69.    {
  70.       DWORD dwType;
  71.       DWORD dwLen = sizeof( szValue )-1;
  72.  
  73.       if ( RegQueryValueEx( hKey, "CMC", NULL, &dwType, szValue, &dwLen ) == ERROR_SUCCESS )
  74.       {
  75.          dwLen = sizeof( szValue )-1;
  76.          if ( szValue[0] == '1' &&
  77.               RegQueryValueEx( hKey, "CMCDLLNAME32", NULL, &dwType, szValue, &dwLen ) == ERROR_SUCCESS )
  78.          {
  79.             bCMCInst = TRUE;
  80.          }
  81.       }
  82.  
  83.       RegCloseKey( hKey );
  84.    }
  85.  
  86.    if ( !bCMCInst )
  87.       return( FALSE );
  88.  
  89.    if ( (hCMCLib = LoadLibrary( (LPTSTR)szValue )) &&
  90.         (pfnCMCActOn = (LPFNCMCACTON)GetProcAddress( hCMCLib, "cmc_act_on" )) &&
  91.         (pfnCMCFree = (LPFNCMCFREE)GetProcAddress( hCMCLib, "cmc_free" )) &&
  92.         (pfnCMCList = (LPFNCMCLIST)GetProcAddress( hCMCLib, "cmc_list" )) &&
  93.         (pfnCMCLogOff = (LPFNCMCLOGOFF)GetProcAddress( hCMCLib, "cmc_logoff" )) &&
  94.         (pfnCMCLogon = (LPFNCMCLOGON)GetProcAddress( hCMCLib, "cmc_logon" )) &&
  95.         (pfnCMCLookup = (LPFNCMCLOOKUP)GetProcAddress( hCMCLib, "cmc_look_up" )) &&
  96.         (pfnCMCQueryConfiguration = (LPFNCMCQUERYCONFIGURATION)GetProcAddress( hCMCLib, "cmc_query_configuration" )) &&
  97.         (pfnCMCRead = (LPFNCMCREAD)GetProcAddress( hCMCLib, "cmc_read" )) &&
  98.         (pfnCMCSend = (LPFNCMCSEND)GetProcAddress( hCMCLib, "cmc_send" )) &&
  99.         (pfnCMCSendDocuments = (LPFNCMCSENDDOCUMENTS)GetProcAddress( hCMCLib, "cmc_send_documents" )) )
  100.    {
  101.       return( TRUE );
  102.    }
  103.  
  104.    CMCUninitialize();
  105.    return( FALSE );
  106. }
  107.  
  108. VOID CMCUninitialize()
  109. {
  110.    if ( hCMCLib )
  111.       FreeLibrary( hCMCLib );
  112.  
  113.    bCMCInst = FALSE;
  114. }
  115.  
  116.  
  117. CMC_return_code CMCActOn( CMC_session_id session, 
  118.                           CMC_message_reference* message_reference, 
  119.                           CMC_enum operation, 
  120.                           CMC_flags act_on_flags, 
  121.                           CMC_ui_id ui_id, 
  122.                           CMC_extension* act_on_extensions )
  123. {
  124.    if ( !bCMCInst )
  125.       return( CMC_E_FAILURE );
  126.  
  127.    return( (*pfnCMCActOn)( session, message_reference, operation, act_on_flags, ui_id, act_on_extensions ) );
  128. }
  129.  
  130. CMC_return_code CMCFree( CMC_buffer memory )
  131. {
  132.    if ( !bCMCInst )
  133.       return( CMC_E_FAILURE );
  134.  
  135.    return( (*pfnCMCFree)( memory ) );
  136. }
  137.  
  138. CMC_return_code CMCList( CMC_session_id session, 
  139.                          CMC_string message_type, 
  140.                          CMC_flags list_flags, 
  141.                          CMC_message_reference* seed, 
  142.                          CMC_uint32* count, 
  143.                          CMC_ui_id ui_id, 
  144.                          CMC_message_summary** result, 
  145.                          CMC_extension* list_extensions )
  146. {
  147.    if ( !bCMCInst )
  148.       return( CMC_E_FAILURE );
  149.  
  150.    return( (*pfnCMCList)( session, message_type, list_flags, seed, count, ui_id, result, list_extensions ) );
  151. }
  152.  
  153. CMC_return_code CMCLogoff( CMC_session_id session, 
  154.                            CMC_ui_id ui_id, 
  155.                            CMC_flags logoff_flags, 
  156.                            CMC_extension* logoff_extensions )
  157. {
  158.    if ( !bCMCInst )
  159.       return( CMC_E_FAILURE );
  160.  
  161.    return( (*pfnCMCLogOff)( session, ui_id, logoff_flags, logoff_extensions ) );
  162. }
  163.  
  164. CMC_return_code CMCLogon( CMC_string service, 
  165.                           CMC_string user, 
  166.                           CMC_string password, 
  167.                           CMC_object_identifier character_set, 
  168.                           CMC_ui_id ui_id, 
  169.                           CMC_uint16 caller_CMC_version, 
  170.                           CMC_flags logon_flags, 
  171.                           CMC_session_id* session, 
  172.                           CMC_extension* logon_extensions )
  173. {
  174.    if ( !bCMCInst )
  175.       return( CMC_E_FAILURE );
  176.  
  177.    return( (*pfnCMCLogon)( service, user, password, character_set, ui_id, 
  178.                            caller_CMC_version, logon_flags, session, logon_extensions ) );
  179. }
  180.  
  181. CMC_return_code CMCLookup( CMC_session_id session, 
  182.                            CMC_recipient* recipient_in, 
  183.                            CMC_flags look_up_flags, 
  184.                            CMC_ui_id ui_id, 
  185.                            CMC_uint32* count, 
  186.                            CMC_recipient** recipient_out, 
  187.                            CMC_extension* look_up_extensions )
  188. {
  189.    if ( !bCMCInst )
  190.       return( CMC_E_FAILURE );
  191.  
  192.    return( (*pfnCMCLookup)( session, recipient_in, look_up_flags, ui_id, count, 
  193.                             recipient_out, look_up_extensions ) );
  194. }
  195.  
  196. CMC_return_code CMCQueryConfiguration( CMC_session_id session, 
  197.                                        CMC_enum item, 
  198.                                        CMC_buffer reference, 
  199.                                        CMC_extension* config_extensions )
  200. {
  201.    if ( !bCMCInst )
  202.       return( CMC_E_FAILURE );
  203.  
  204.    return( (*pfnCMCQueryConfiguration)( session, item, reference, config_extensions ) );
  205. }
  206.  
  207. CMC_return_code CMCRead( CMC_session_id session, 
  208.                          CMC_message_reference* message_reference, 
  209.                          CMC_flags read_flags, 
  210.                          CMC_message** message, 
  211.                          CMC_ui_id ui_id, 
  212.                          CMC_extension* read_extensions )
  213. {
  214.    if ( !bCMCInst )
  215.       return( CMC_E_FAILURE );
  216.  
  217.    return( (*pfnCMCRead)( session, message_reference, read_flags, message, ui_id, read_extensions ) );
  218. }
  219.  
  220. CMC_return_code CMCSend( CMC_session_id session, 
  221.                          CMC_message* message, 
  222.                          CMC_flags send_flags, 
  223.                          CMC_ui_id ui_id, 
  224.                          CMC_extension* send_extensions )
  225. {
  226.    if ( !bCMCInst )
  227.       return( CMC_E_FAILURE );
  228.  
  229.    return( (*pfnCMCSend)( session, message, send_flags, ui_id, send_extensions ) );
  230. }
  231.  
  232. CMC_return_code CMCSendDocuments( CMC_string recipient_addresses, 
  233.                                   CMC_string subject, 
  234.                                   CMC_string text_note, 
  235.                                   CMC_flags send_doc_flags, 
  236.                                   CMC_string file_paths, 
  237.                                   CMC_string file_names, 
  238.                                   CMC_string delimiter, 
  239.                                   CMC_ui_id ui_id )
  240. {
  241.    if ( !bCMCInst )
  242.       return( CMC_E_FAILURE );
  243.  
  244.    return( (*pfnCMCSendDocuments)( recipient_addresses, subject, text_note, send_doc_flags, file_paths,
  245.                                    file_names, delimiter, ui_id ) );
  246. }
  247.  
  248.